using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._NetworkDiagramTools._Configuration
{
    /// <summary>
    /// <para>Add Partial Overlapping Edges Layout</para>
    /// <para>Adds the Partial Overlapping Edges Layout algorithm to the list of layouts to be automatically chained at the end of the building of diagrams based on a given template. This tool also presets the Partial Overlapping Edges Layout algorithm parameters for any diagram based on that template.</para>
    /// <para>将“部分重叠边布局”算法添加到布局列表中，以便在基于给定模板构建逻辑示意图结束时自动链接。此工具还为基于该模板的任何逻辑示意图预设了部分重叠边布局算法参数。</para>
    /// </summary>    
    [DisplayName("Add Partial Overlapping Edges Layout")]
    public class AddPartialOverlappingEdgesLayout : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public AddPartialOverlappingEdgesLayout()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_utility_network">
        /// <para>Input Network</para>
        /// <para>The utility network or trace network containing the diagram template to modify.</para>
        /// <para>包含要修改的逻辑示意图模板的公共设施网络或追踪网络。</para>
        /// </param>
        /// <param name="_template_name">
        /// <para>Input Diagram Template</para>
        /// <para>The name of the diagram template to modify.</para>
        /// <para>要修改的逻辑示意图模板的名称。</para>
        /// </param>
        /// <param name="_is_active">
        /// <para>Active</para>
        /// <para><xdoc>
        ///   <para>Specifies whether the layout algorithm will automatically execute when generating diagrams based on the specified template.
        ///   <bulletList>
        ///     <bullet_item>Checked—The added layout algorithm will automatically run during the generation of any diagram that is based on the Input Diagram Template parameter. This is the default.
        ///       <para>The parameter values specified for the layout algorithm are used to run the layout during diagram generation. They are also loaded by default when the algorithm is to be run on any diagram based on the input template.    </para>
        ///     </bullet_item><para/>
        ///     <bullet_item>Unchecked—All the parameter values currently specified for the added layout algorithm will be loaded by default when the algorithm is to be run on any diagram based on the input template.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>指定在基于指定模板生成逻辑示意图时是否自动执行布局算法。
        ///   <bulletList>
        /// <bullet_item>选中 - 添加的布局算法将在生成基于输入逻辑示意图模板参数的任何逻辑示意图期间自动运行。这是默认设置。
        ///       <para>为布局算法指定的参数值用于在逻辑示意图生成期间运行布局。默认情况下，当算法要在基于输入模板的任何逻辑示意图上运行时，也会加载它们。   </para>
        ///     </bullet_item><para/>
        ///     <bullet_item>未选中—默认情况下，当要在基于输入模板的任何逻辑示意图上运行该算法时，将加载当前为添加的布局算法指定的所有参数值。</bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// </param>
        /// <param name="_buffer_width_absolute">
        /// <para>Buffer Width</para>
        /// <para>The width of the buffer zone in which to search for collinear edge segments.</para>
        /// <para>要在其中搜索共线边段的缓冲区的宽度。</para>
        /// </param>
        /// <param name="_offset_absolute">
        /// <para>Offset</para>
        /// <para>The distance that will separate the detected edge segments.</para>
        /// <para>将分隔检测到的边段的距离。</para>
        /// </param>
        public AddPartialOverlappingEdgesLayout(object _in_utility_network, object _template_name, _is_active_value _is_active, string _buffer_width_absolute, string _offset_absolute)
        {
            this._in_utility_network = _in_utility_network;
            this._template_name = _template_name;
            this._is_active = _is_active;
            this._buffer_width_absolute = _buffer_width_absolute;
            this._offset_absolute = _offset_absolute;
        }
        public override string ToolboxName => "Network Diagram Tools";

        public override string ToolName => "Add Partial Overlapping Edges Layout";

        public override string CallName => "nd.AddPartialOverlappingEdgesLayout";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_utility_network, _template_name, _is_active.GetGPValue(), _buffer_width_absolute, _offset_absolute, _optimize_edges.GetGPValue(), _out_utility_network, _out_template_name];

        /// <summary>
        /// <para>Input Network</para>
        /// <para>The utility network or trace network containing the diagram template to modify.</para>
        /// <para>包含要修改的逻辑示意图模板的公共设施网络或追踪网络。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Network")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_utility_network { get; set; }


        /// <summary>
        /// <para>Input Diagram Template</para>
        /// <para>The name of the diagram template to modify.</para>
        /// <para>要修改的逻辑示意图模板的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Diagram Template")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _template_name { get; set; }


        /// <summary>
        /// <para>Active</para>
        /// <para><xdoc>
        ///   <para>Specifies whether the layout algorithm will automatically execute when generating diagrams based on the specified template.
        ///   <bulletList>
        ///     <bullet_item>Checked—The added layout algorithm will automatically run during the generation of any diagram that is based on the Input Diagram Template parameter. This is the default.
        ///       <para>The parameter values specified for the layout algorithm are used to run the layout during diagram generation. They are also loaded by default when the algorithm is to be run on any diagram based on the input template.    </para>
        ///     </bullet_item><para/>
        ///     <bullet_item>Unchecked—All the parameter values currently specified for the added layout algorithm will be loaded by default when the algorithm is to be run on any diagram based on the input template.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>指定在基于指定模板生成逻辑示意图时是否自动执行布局算法。
        ///   <bulletList>
        /// <bullet_item>选中 - 添加的布局算法将在生成基于输入逻辑示意图模板参数的任何逻辑示意图期间自动运行。这是默认设置。
        ///       <para>为布局算法指定的参数值用于在逻辑示意图生成期间运行布局。默认情况下，当算法要在基于输入模板的任何逻辑示意图上运行时，也会加载它们。   </para>
        ///     </bullet_item><para/>
        ///     <bullet_item>未选中—默认情况下，当要在基于输入模板的任何逻辑示意图上运行该算法时，将加载当前为添加的布局算法指定的所有参数值。</bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Active")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public _is_active_value _is_active { get; set; }

        public enum _is_active_value
        {
            /// <summary>
            /// <para>ACTIVE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("ACTIVE")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>INACTIVE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("INACTIVE")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Buffer Width</para>
        /// <para>The width of the buffer zone in which to search for collinear edge segments.</para>
        /// <para>要在其中搜索共线边段的缓冲区的宽度。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Buffer Width")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public string _buffer_width_absolute { get; set; }


        /// <summary>
        /// <para>Offset</para>
        /// <para>The distance that will separate the detected edge segments.</para>
        /// <para>将分隔检测到的边段的距离。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Offset")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public string _offset_absolute { get; set; }


        /// <summary>
        /// <para>Optimize edges</para>
        /// <para><xdoc>
        ///   <para>Specifies how segments will be placed along edges:
        ///   <bulletList>
        ///     <bullet_item>Checked—The placement of segments will be optimized in each set of collinear segments. This is done by focusing on their connections instead of their positions. Segments that cross each other can be repositioned so they do not cross.  </bullet_item><para/>
        ///     <bullet_item>Unchecked—The initial position of each segment will be maintained in the collinear segment set and crossings will be preserved. This is the default.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>指定如何沿边放置线段：
        ///   <bulletList>
        ///     <bullet_item>选中—将在每组共线线段中优化线段的位置。这是通过关注他们的联系而不是他们的位置来完成的。可以重新定位相互交叉的线段，使其不会交叉。 </bullet_item><para/>
        ///     <bullet_item>未选中—每个线段的初始位置将保留在共线线段集中，并且将保留交叉点。这是默认设置。 </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Optimize edges")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _optimize_edges_value _optimize_edges { get; set; } = _optimize_edges_value._false;

        public enum _optimize_edges_value
        {
            /// <summary>
            /// <para>OPTIMIZE_EDGES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("OPTIMIZE_EDGES")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>DO_NOT_OPTIMIZE_EDGES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("DO_NOT_OPTIMIZE_EDGES")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Output Network</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Network")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_utility_network { get; set; }


        /// <summary>
        /// <para>Output Diagram Template</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Diagram Template")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_template_name { get; set; }


        public AddPartialOverlappingEdgesLayout SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}